
import Util from './Util'
import Auth from './Auth'

function accessAPI(opts, cb, errorCb){
    let self = this;
    let apiObj = opts.apiObj || {},
    apiUrl = apiObj.url,
    _method = apiObj.method,
    _noAuth = apiObj.noAuth || '',
    _body = opts.body || {},
    _path = opts.path,
    _query = opts.query || {};
    if( Util.isObject(_path) ){
        Object.keys(_path).forEach(key => {
            apiUrl = apiUrl.replace( ':'+key, _path[key] );
        })
    }

    // add query params
    if( _query && !Util.isEmptyObj(_query) ){
        if( apiUrl.indexOf('?')<0 ){
            apiUrl += '?'
        }else{
            let urlQuery = apiUrl.split('?')[1];
            if( urlQuery ){
                let queryArr = urlQuery.split('&');
                queryArr.map( value => {
                    if( value.indexOf('=')>=0 ){
                        let tempArr = value.split('=');
                        if( tempArr[0] && tempArr[1] ){
                            _query[tempArr[0]] = tempArr[1];
                        }
                    }
                })
            }
            apiUrl = apiUrl.split('?')[0] + '?';
        }
        let queryCount = 0;
        Object.keys(_query).forEach(key => {
            let value = _query[key];
            if( queryCount>0 ){
                apiUrl += '&';
            }
            apiUrl += (key+'='+value);
            queryCount ++;
        })
    }
    return new Promise((resove,reject)=>{
        let options = {
            url: apiUrl,
            method: _method,
            timemout: '5000',
            header:{},
            data: _body,
            success: function(result){
                console.log( 'api call result', result )
                if( result.statusCode == '422' ){
                    for (var key in result.data.errors) {
                        wx.showToast({title: result.data.errors[key][0]});
                    }
                    reject(result.data);
                }
                if( result.statusCode == '401' ){
                    Auth.login().then(function(){
                        wx.request(options);
                    })
                    // reject(result.data);
                }
                if( result.statusCode == '400' ){
                    reject(result.data);
                }
                if( result.statusCode == '500' ){
                    wx.showToast({title: '服务器发生错误'});
                    reject(result.data);
                }
                if( result.statusCode == '200' ||  result.statusCode == '201' ||  result.statusCode == '202' ){
                    resove(result.data)
                }
            }
        };
        !_noAuth? options.header.Authorization = 'Bearer ' +  wx.getStorageSync('token'):'';
        console.log( 'options', options )
        wx.request(options);
    });

    // let ajaxFun = (config={})=>{

    //     return;
    //     Vue.http( options ).then( response => cb(response.body.meta ? response.body : response.body.data), response =>{
    //         if( response.body == null ){
    //             if( !config.count ){
    //                 config.count = 1;
    //             }else{
    //                 config.count += 1;
    //             }
    //             if( config.count <= 3 ){
    //                 setTimeout(function(){
    //                     ajaxFun({count:config.count});
    //                 },1000)
    //             }else{
    //                 Util.popup({content: '系统出现错误，请稍后再试'});
    //                 errorCb(response.body)
    //             }
    //             return;
    //         }
    //         console.log( 'ajaxFun failed', response.body );
    //         let data = response.body;
    //         if(data.status_code=='422'){
    //             for (var key in data.errors) {
    //                 Util.popup({content: data.errors[key][0]});
    //             }
    //             errorCb(response.body)
    //         }else if(data.status_code=='400'){
    //             if(data.message){
    //                 Util.popup({content: data.message});
    //             }
    //             errorCb(response.body)
    //         }else if(data.status_code=='401'){
    //             console.log( '401 error');
    //             if( _noAuth ){
    //                 errorCb(response.body)
    //             }else{
    //                 login( Auth.getOpenId(), function(response){
    //                     console.log( 'api 401 and login success', response );
    //                     ajaxFun(response.token);
    //                 }, function(response){
    //                     console.log( 'api 401 and login failed', response );
    //                     let queryObj = {};
    //                     if( Router.currentRoute.name ){
    //                         queryObj.back_url = Router.currentRoute.name;
    //                     }
    //                     if( !Util.isEmptyObj( Router.currentRoute.query ) ){
    //                         queryObj.query = JSON.stringify(Router.currentRoute.query);
    //                     }
    //                     if( !Util.isEmptyObj( Router.currentRoute.params ) ){
    //                         queryObj.params = JSON.stringify(Router.currentRoute.params);
    //                     }
    //                     Router.push({name:'register', query:queryObj});
    //                     // Util.popup( {content:'系统出现错误，请退出后重新登录'} );
    //                     errorCb(response)
    //                 } )
    //             }
    //         }else{
    //             errorCb(response.body)
    //         }
    //     })
    // };
    // ajaxFun();
}

module.exports = {
    accessAPI: accessAPI,
};